package br.com.webhomesites.padrao.presenter;

import br.com.webhomesites.configuracao.model.CidadeDAO;
import br.com.webhomesites.configuracao.model.CidadeModel;
import br.com.webhomesites.configuracao.model.EstadoDAO;
import br.com.webhomesites.padrao.contracts.IFornecedorPresenter;
import br.com.webhomesites.padrao.contracts.IFornecedorView;
import br.com.webhomesites.padrao.utils.Mascarador;
import java.awt.Component;
import java.awt.event.*;
import javax.swing.JOptionPane;

public class FornecedorPresenterActionListeners {

    static class AlterarActionListener implements ActionListener {

        private FornecedorPresenter presenter;

        public AlterarActionListener(FornecedorPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.UPDATE_STRATEGY);
            //presenter.habilitarEdicao(true);


            IFornecedorView view = (IFornecedorView) presenter.getView();

              view.enableBtnInserir(false);
              view.enableBtnRemover(false);
              view.enableBtnCancelar(true);
              view.enableBtnSalvar(true);
              view.enableBtnAlterar(false);

        }
    }

    static class CancelarActionListener implements ActionListener {

        private FornecedorPresenter presenter;

        public CancelarActionListener(FornecedorPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {

            IFornecedorView view = (IFornecedorView) presenter.getView();

            view.clearFields();

            //presenter.habilitarEdicao(false);  

            view.enableBtnInserir(true);
            view.enableBtnRemover(false);
            view.enableBtnCancelar(false);
            view.enableBtnSalvar(false);
            view.enableBtnAlterar(false);

        }
    }

    static class SalvarActionListener implements ActionListener {

        private FornecedorPresenter presenter;

        public SalvarActionListener(FornecedorPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.getOperacao().execute();
            //presenter.setOperacao(presenter.UPDATE_STRATEGY);
            //presenter.habilitarEdicao(false);  

            //setUpViewListeners();

            IFornecedorView view = (IFornecedorView) presenter.getView();

            if (FornecedorPresenter.validado) {
                view.enableBtnInserir(true);
                view.enableBtnRemover(false);
                view.enableBtnCancelar(false);
                view.enableBtnSalvar(false);
                view.enableBtnAlterar(true);

                System.out.println("Passou na ação salvar!");
            }

        }
    }

    static class InserirActionListener implements ActionListener {

        private FornecedorPresenter presenter;

        public InserirActionListener(FornecedorPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.INSERT_STRATEGY);


            IFornecedorView view = (IFornecedorView) presenter.getView();

            presenter.habilitarEdicao(true);
            view.clearFields();

            presenter.novoFornecedor();


            view.enableBtnInserir(false);
            view.enableBtnRemover(false);
            view.enableBtnCancelar(true);
            view.enableBtnSalvar(true);
            view.enableBtnAlterar(false);

        }
    }

    static class RemoverActionListener implements ActionListener {

        private FornecedorPresenter presenter;

        public RemoverActionListener(FornecedorPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {

            if (JOptionPane.showConfirmDialog((Component) presenter.getView(), "Deseja remover?", "Pergunta", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {

                IFornecedorView view = (IFornecedorView) presenter.getView();

                presenter.removerFornecedor();
                view.clearFields();

                view.enableBtnInserir(true);
                view.enableBtnAlterar(false);
                view.enableBtnRemover(false);
            }
        }
    }

    static class SairActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent evt) {
            System.exit(0);
        }
    }  
    
    static class CampoKeyListener implements KeyListener {

        private IFornecedorPresenter presenter;
        IFornecedorView view;
        Mascarador mask;

        public CampoKeyListener(IFornecedorPresenter presenter) {
            this.presenter = presenter;
            this.view = (IFornecedorView) presenter.getView();
            mask = new Mascarador();
        }

        @Override
        public void keyTyped(KeyEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public void keyPressed(KeyEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public void keyReleased(KeyEvent e) {
            view.setCpf(mask.getMascara(view.getCpf(), mask.CPF, e));
            view.setCnpj(mask.getMascara(view.getCnpj(), mask.CNPJ, e));
            view.setRg(mask.getMascara(view.getRg(), mask.RG, e));
            view.setTelefone(mask.getMascara(view.getTelefone(), mask.TELEFONE, e));
            view.setCelular(mask.getMascara(view.getCelular(), mask.TELEFONE, e));
        }
    }

    static class ItemChangedListener implements ActionListener {

        private IFornecedorPresenter presenter;
        IFornecedorView view;

        public ItemChangedListener(IFornecedorPresenter presenter) {
            this.presenter = presenter;
            this.view = (IFornecedorView) presenter.getView();
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            if (view.isRbPessoaFisica()) {
                view.enableTxtFornecedorRg(true);
                view.enableTxtFornecedorCpf(true);
                view.enableTxtFornecedorCnpj(false);
                view.enableTxtFornecedorInscricaoEstadual(false);
                view.enableTxtFornecedorRazaoSocial(false);
            } else if (view.isRbPessoaJuridica()) {
                view.enableTxtFornecedorRg(false);
                view.enableTxtFornecedorCpf(false);
                view.enableTxtFornecedorCnpj(true);
                view.enableTxtFornecedorInscricaoEstadual(true);
                view.enableTxtFornecedorRazaoSocial(true);
            }
        }
    } 
    
    static class ItemEstadoListener implements ItemListener {

        private IFornecedorPresenter presenter;
        IFornecedorView view;
        CidadeDAO cidadeDAO = new CidadeDAO();
        EstadoDAO estadoDAO = new EstadoDAO();
        CidadeModel cidadeModel = new CidadeModel();
        
        public ItemEstadoListener(IFornecedorPresenter presenter) {
            this.presenter = presenter;
            this.view = (IFornecedorView) presenter.getView();
            
        }
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getSource()==view.getComboEstadoJCombo()) {
                cidadeModel.setListaCidades(cidadeDAO.findByIdEstado(estadoDAO.getIdByDescricao(view.getEstado())));
                view.setListaCidade(cidadeModel.getListaCidades());
            }
        }
    }
    
    
    static class BuscaAvancadaActionlistener implements ActionListener {
        
        FornecedorPresenter presenter;

        public BuscaAvancadaActionlistener(FornecedorPresenter presenter) {
           this.presenter = presenter;
        }
        
        @Override
        public void actionPerformed(ActionEvent e) {
            presenter.buscaAvancada();
        }
        
    }
}
